#include "encode.h"
#include "isr.h"

ENCODE encode[2] = {{encodePin1, 0},
                    {encodePin2, 0}};
/**
 * @brief 编码器初始化
 *
 */
void encodeInit(void)
{
    ExInt0_Init(); // 外部中断0初始化
    ExInt1_Init(); // 外部中断1初始化
    encodePin = encode[0].pin | encode[1].pin;
}

/**
 * @brief 读取编码器计数
 *
 * @param ch
 * @return int16_t
 */
int16_t encodeRead(uint8_t ch)
{
    return encode[ch].count;
}

/**
 * @brief 读取编码器计数并擦除
 *
 * @param ch
 * @return int16_t
 */
int16_t encodeReadErase(uint8_t ch)
{
    int16_t ret = encode[ch].count;
    encode[ch].count = 0;
    return ret;
}

/**
 * @brief 编码器解码触发器，放在外部中断内
 *
 * @param ch
 */
void encodeTrigger(uint8_t ch)
{
    int8_t dir = 0;
    if (ch == 0) // 将0通道的反向
        dir = -1;
    else
        dir = 1;
    if ((encodePin & encode[ch].pin) != 0)
        encode[ch].count += dir;
    else
        encode[ch].count -= dir;
}
